// Copyright 2022 a.o.smith ALL Rights Reserved
package com.liuxinlong.modules.specialist.service;

import com.liuxinlong.modules.entity.ExpertProject;
import com.liuxinlong.modules.out.dto.ProjectDto;
import org.springframework.web.multipart.MultipartRequest;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 项目信息服务层接口
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2023年3月8日
 */
public interface SpecialistProjectService {
    /**
     * 分页查询项目信息
     *
     * @param queryParam 查询条件
     * @return 项目信息列表
     */
    List<Map<String, Object>> pageProjectInfo(Map<String, Object> queryParam);

    /**
     * 查询项目信息条数
     *
     * @param queryParam 查询条件
     * @return 项目信息条数
     */
    int getProjectCount(Map<String, Object> queryParam);

    /**
     * 新增项目信息
     *
     * @param project    项目信息
     * @param outProject 外部项目信息
     * @return 新增成功标识
     */
    Map<String, Object> addProjectInfo(ExpertProject project, ProjectDto outProject);

    /**
     * 修改项目信息
     *
     * @param project 项目信息
     */
    void updateProjectInfo(ExpertProject project);

    /**
     * 删除项目信息
     *
     * @param id 项目信息id
     */
    void deleteProjectInfo(String id);

    /**
     * 导出项目列表
     *
     * @param response response
     */
    void exportProjectList(HttpServletResponse response);

    /**
     * 导出项目信息
     *
     * @param id       项目信息id
     * @param response response
     */
    void exportProjectInfo(String id, HttpServletResponse response);

    /**
     * 查询项目成员信息
     *
     * @param id 项目id
     * @return 项目成员信息
     */
    List<Map<String, Object>> queryMemberInfos(String id);

    /**
     * 获取统计信息
     *
     * @return 统计信息
     */
    Map<String, Object> queryProjectSummary();

    /**
     * 获取项目详情信息
     *
     * @param id 项目id
     * @return 项目详情信息
     */
    Map<String, Object> queryProjectDetail(String id);

    /**
     * 修改项目成员信息
     *
     * @param projectId   项目id
     * @param memberId    成员id
     * @param operateType 操作类型 1.增 2.减
     */
    void updateProjectMemberInfo(String projectId, String memberId, int operateType);

    /**
     * 文件上传
     *
     * @param multipartRequest 上传文件信息
     */
    void addFileInfos(MultipartRequest multipartRequest);

    /**
     * 下载项目文件
     *
     * @param id       项目文件id
     * @param response response
     */
    void downloadProjectFile(String id, HttpServletResponse response);

    /**
     * 查询项目专家信息
     *
     * @param id 项目id
     * @return 项目专家信息
     */
    List<Map<String, Object>> queryExpertInfos(String id);
}
